package com.hencoder.hencoderpracticedraw1.learn

import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Path
import android.graphics.RectF
import android.util.AttributeSet
import android.view.View

class DrawPathView :View {

    constructor(context:Context):super(context)

    constructor(context: Context,attributeSet: AttributeSet):super(context,attributeSet)
    override fun draw(canvas: Canvas?) {
        super.draw(canvas)
//        myDrawPath(canvas!!)
//        drawLine(canvas!!)
//        drawArc(canvas!!)
        drawTwoCircle(canvas!!)
    }

    //画圆
    fun myDrawCircle(canvas: Canvas) {
        val paint = Paint()
        val path = Path()
        path.addCircle(500f, 500f, 100f, Path.Direction.CW)

        canvas.drawPath(path, paint)
    }

    //画线(下面是用线画一个三角)
    fun drawLine(canvas: Canvas){
        val paint = Paint()
        paint.style=Paint.Style.STROKE
        paint.strokeWidth=10f
        val path = Path()
        path.moveTo(100f,100f) //起始坐标移动到（100，100）的位置
        path.lineTo(200f,300f)// 由当前位置 (0, 0) 向 (200f, 300f) 画一条直线
        //rLineTo的坐标是在原有的坐标基础上再增加，比如下面，从最终坐标是（200+0，300+200）
        path.rLineTo(100f,-200f)// 由当前位置 (0f, 300f) 向(0,500) 像素的位置画一条直线
        path.rLineTo(-200f,0f)
        canvas.drawPath(path, paint)
    }

    //画弧形
    fun drawArc(canvas: Canvas){
        val rectf=RectF(0f,0f,600f,700f)


        val paint = Paint()
        paint.style=Paint.Style.STROKE
        paint.strokeWidth=10f

        val path=Path()
        //先把笔的开始位置定到这里
//        path.moveTo(300f,300f)
        //rectf指定上下左右
        //startAngle 是弧形的起始角度（x 轴的正向，即正右的方向，是 0 度的位置；顺时针为正角度，逆时针为负角度），
        //sweepAngle 是弧形划过的角度；useCenter 表示是否连接到圆心，如果不连接到圆心，就是弧形，如果连接到圆心，就是扇形。
        //forceMoveTo 参数的意思是，绘制是要「抬一下笔移动过去」，还是「直接拖着笔过去」，区别在于是否留下移动的痕迹。
//        path.addArc(rectf,0f,180f)和arcTo一样，只不过默认forceMoveTo为True
        path.arcTo(rectf,0f,180f,false)   //有痕迹
        path.close()   //将图形封闭起来
        canvas.drawPath(path,paint)
    }

    //Path.setFillType(Path.FillType ft) 设置填充方式
    //EVEN_ODD
    //WINDING （默认值）
    //INVERSE_EVEN_ODD
    //INVERSE_WINDING
    fun drawTwoCircle(canvas: Canvas){
        val paint=Paint()
        paint.style=Paint.Style.FILL
        paint.strokeWidth=5f
        val path=Path()
        path.fillType=Path.FillType.EVEN_ODD
        path.addCircle(100f,100f,100f,Path.Direction.CW)
        path.addCircle(200f,100f,100f,Path.Direction.CW)

        canvas.drawPath(path,paint)
    }


}